/*
 *  Matrix.h
 *  T3nsors
 *
 *  Created by Michael Barriault on 10-09-23.
 *  Copyright 2010 MikBarr. All rights reserved.
 *
 */

#pragma once

#include <T3nsors/Vector.h>

namespace T3 {
	class Matrix {
	private:
		std::vector<T3::Vector> T;
	public:
		Domain O;
		int N;
		std::string id;
		Matrix(void);
		Matrix(int,std::string iid="");
		Matrix(T3::Domain,int,std::string iid="");
		T3::Vector& operator()(int);
		T3::Scalar& operator()(int,int);
		real& operator()(int,int,int,...);
		Matrix& operator+=(Matrix&);
	};
}

T3::Matrix diff(T3::Vector);
T3::Scalar div(T3::Vector);
T3::Vector curl(T3::Vector);
T3::Matrix LinCom(real,T3::Matrix,real,T3::Matrix,std::string id="");
T3::Matrix LinCom(real,T3::Matrix,real,T3::Matrix,real,T3::Matrix,std::string id="");
T3::Matrix LinCom(real,T3::Matrix,real,T3::Matrix,real,T3::Matrix,real,T3::Matrix,std::string id="");
